Yeah, according to ARB_shader_objects extension specification detaching shader object does not affect the link state of program object nor the executable itself.
Unfortunately it does - on ATI cards
I only needed to comment-out glDetachObjectARB calls from my appliaction to make it work on ATI card. On NVIDIA it works fine - attach, link and detach - but when I detached all shader objects from a program object AFTER it was linked I found myself trying to run an empty program object.
So keep your shader objects attached to program objects as long as you need these program objects to work.
I hope this will help someone to conquer the world.