In the most minimal sense that isn’t possible as Materials don’t manage constant state. During the batch loop they pump their parameters into the constant-buffers that
You could add a bulk set like
static void Material::SetShaderParameterInBulk(const Vector<SharedPtr<Material> >& materials, const String& name, const Variant& value) to tightly loop through them first to set the value directly and again to do the parameter-hash and memory size updates on each of them. C++ side that probably won’t have any major wins, but from script (be it As, Lua, or C#) it’ll be more significant because of less marshaling.
That’s as close as you could there without the larger amount of work required to to add cbuffer management into materials. Since they’d be working with their own private custom-params cbuffer in that case there wouldn’t be any wins to be had that way anyways as you couldn’t really “inherit” that in a fashion that wouldn’t just trigger a heap of calls in another fashion (like an event).