Re your use of STGs as backup targets to any/many MSDP storage units. My advice is to sit back for a few moments, and try to imagine where your data is de-duplicating. Several of us have already learnt not to use multiple MSDP STUs in STGs.
Re balancing policies and clients - I was only trying to give the briefest of outlines as to how I tackled the problem, in an effort to steer you in the right direction, and I also tried to remember some of the positive benefits (not so much side effects) of what could also be produced when the problem of balancing backup clients across MSDP pools is tackled programmatically.
It's a little but unfair to say it was done with scripting, as the script wasn't really a script in the end - it became a large body of code - crica 3,600 lines of code (including comments and white space) - and should instead really be thought of as an applet or medium sized application program to reconfigure the SLPs used by all backup policies.
It wasn't easy, and it took several man weeks of coding effort to develop and debug, spread over two and bit months. Personally, I don't think that this is really something that the average scripter (doing 10 to 50 line scripting) could tackle, as you almost have to have a background in applications programming to do something like that - as it involves quite a lot of stateful manipulation of data (using full lists from various sources; images, policies and schedules, clients, STUs, STGs, SLPs). I'm not sure that I've got the time to outline psuedo code for you. And, it would not be possible to develop this out of sight, because it is highly likely that a developor/programmer would have to nuture the code and grow/create the complexities to adapt and take in to consideration all manner of site specific requirements for your environment.
Have you thought instead of perhaps carefully manually balancing say the top 10% to 20% (by size) of backup clients, and then just apportioning the rest of the backup clients as best you can. And fine tune / tweak it afterwards. This way you could probably achieve something fairly useful within a moderate time frame - ok, it won't be perfect, the way a program can do it - but at least it'll be something.