That is, at a basic level, how mine work. The only difference being that mine doesn't have TextureShader/BrushShader/LightShader. It could work, but I think it's better to just write vertex and fragment shaders for specific tasks and combine them for specific purposes.
Vertex/fragment shader is not a very useful 'logical' division - it just happens to be the current 'physical' division.