There isn’t any exposed API system for mob spawning, so while you can technically cancel all natural spawning and you could implement your own spawning system, it’s not likely to be optimal compared to an API that actually allows manipulation of spawning systems from the game.
Refer to Answer 1.
You can generally apply all sorts of “data” to an Entity by using the Data API, either in Key form or DataManipulator form. You can refer to this thread on using the Data API as there have been many questions asked and answered.
There is work being done on this in the refactor/event-names branch that will refine not only events themselves, but also causes for events.
You generally can only use MobSpawnerData with either a MobSpawner tile entity or a MobSpawnerMinecart entity. As answer 1 mentions, there is no API exposed system for natural spawning manipulation.