I just registered to say that I'm interested in this sort of analysis, even if it's not strictly relevant to real battles. A couple days ago (before I saw this thread), I calculated (just to satisfy my curiosity) what the average weakness/resistance coefficient was for each type pairing (with about 10 lines of MATLAB code, not by hand :)):

http://img136.imageshack.us/img136/9453/defensematrixos0.jpg
and the same thing for attacking types:

http://img126.imageshack.us/img126/6866/attackvectorfm5.jpg
(a little bit hairier, had to use a 3-dim array with coefficient as a function of attack type and both defending types)

So in a perfectly balanced pokeworld, Ground is the most powerful attacking type and Poison the weakest. Ice/Rock would be the worst defensive typing and Ghost/Steel the best (with Ice/Rock taking over twice as much damage as Ghost/Steel on average). Neither type even exists in the game, and it doesn't account for STAB, move pools and such, but I thought it was interesting. Anyway, I'm proficient in this kind of linear algebra and programming, so if you have any ideas you need help running the numbers on, drop me a PM.