Where do/should Gateway Scripts live with respect to an inherited project structure?

Correct. If there are scripting functions that are used everywhere, they belong in the universe project.

Keep in mind that everything is a trade-off. In this case re-use of common resources versus production disruptions when common resources are edited/updated/replaced.

That's why I strongly recommend that resources get pushed towards universe only after considerable testing time, and only during suitable production downtime opportunities.

When developing updates to such resources, override the resource in a leaf project. Only after testing and QA passes should the update get "sent" to the inheritable project it came from.