Control materials per grand-child without altering parent/child

Let me say first that I have already set up a master material, and several material instances of that master material.

The research project I’m working on is for a golf game (transitioning from proprietary software), where each course has its own shades of grasses (usually). So I had in mind to set up a master material, and then to instance that into various grass types (Fairway, green, approach, etc.) And then, per level/course, I would alter each of those based on the color I need them to be (As well as swap decals and entire texture sets). However, without creating duplicates of each material instance per course, I would end up affecting all other golf courses each time I made a change. So I need help figuring out how I can save per level material changes without creating new materials for each course.

And I can’t stress enough that I don’t want to duplicate the materials each time, as there are roughly 70+ courses that this will affect.
(There are also on average 20 to 40 textures used per course.)

I understand that a rather complicated blueprint could be made per level to make all these changes, but I’m hoping for a much simpler solution. (I’m an artist, code isn’t my strong point.)