What is the most commonly used method?
I don't think there's a "commonly used" method at all.
For example, lets say that i create a custom shader called: blue_shader.glsl. If I want to load 1000 3d models, and only have certain ones use the shader, how should I specify which ones?
The question, in this form, makes no sense at all from a practical workflow.
Most (99%) of the models are authored with a specific shading in mind. A certain model will use a certain shader. Whatever this setting can be overridden is a different question and I'd leave it for the future. Anyway, there are two main mindsets here:
The material based approach.
This means each model refers to an external resource ("material") specifying appearance in full detail. It's an high-level approach stemming from (I guess) cheap DCC tools where for each different result, you need a different material name. It's relatively convenient after all but a bit inflexible for logic.
At the lower end the material is a combination of shader code (to be compiled to GPU) and its parameters specified in full which are the values to put in GPU registers to execute the shader. Textures are special values but besides the special mangling, they are just values like others.
The decoupled approach.
Something similar to what's above, although I cannot say I understand the example in full detail.
When using this system, models reference a shader code to load. The code exposes a set of parameters (uniforms) and cannot run on its own so the resource also includes a blob of data for shader processing. The blob of data could be the <Texture> tags above... but again, I'm not 100% sure of what the above example is to be intended.
This approach requires quite some care as data validation way more critical.
In my experience, material-oriented systems provide great value at a reasonable cost. I had to switch to the decoupled approach due to some non-technical difficulties but I'm still not sure I had my payback.