Does blender have the concept of instances and params? Goal

My goal is to keep a single source of truth while allowing instances to modify a few expected parameters (a material for example).

This way I can create a small object in a separate file, and create instances of it in many different files. Each instance would allow me to override a param from its default value for the material.

If I ever need to change all objects of that type, I'd just modify the main one.

It's a bit similar to Object-Oriented Programming, but using Blender objects instead.

Unreal Engine 4 has exactly this concept that I'm looking for when it comes to materials: https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/MaterialInstances/

Does Blender Cycles have this concept of params for materials? Does it also have the concept of instances?

Example

File: Ball.blend


Created a Sphere called Ball.
Apply a simple diffuse material. By default the color is red. Instances of Ball should be able to choose a different color, so I want to create a param called 'color' for the material.


File: Beach.blend


Shift+F1 to Link Ball into this file. Any changes made in the original Ball will be reflected here.
I want to change the color of the ball to green, so I override the param 'color' to 'green'.


I could decide later that all balls should be glossy, so I could apply this shader to the main material and all balls are now glossy while maintaining the green color for my instance since I'm expecting a parameter in the material called 'color'.
This can be accomplished with Node Groups.

Grouping nodes can simplify a node tree by allowing instancing and hiding parts of the tree. Both material and composite nodes can be grouped.
Also nested node groups are supported. I.e. a node group can be inserted or created inside another node group.

For example, creating a 'GlossyMaterial' shader group with an input for color. Node Groups can be linked/appended across files and shared between many material instances.
Further resources:

Introduction to Node Groups