I believe preprocessing was available in glsl from version 1.10 (I think). EDIT : Check out the GLSL spec from page 9 here. And glBufferSubData is similar to glMapBuffer, you could use either one I guess.
I agree but unless I’m missing something, while these seems to be valid solutions, it will make the unique shader concept collapse as we might alternate the skinning condition every draw.
This is true. Is the idea of your unique shader to use the same shader for every object? While I understand the simplicity of that, it would result in alot of redundant calculations (such as skinning for non skinned objects). You could group skinned and non skinned objects together for rendering so there is no alternating?
A similar approach to what you're doing is called an Uber shader. Basically a shader with all possible combinations in it and uses alot of #defines to create the shader that's needed.