As far as i can see with iBGP there are 2 options :-
1. synchronization is enable and redistribution of BGP into the IGP
2. no synchronization + every router (not just iBGP routers) part of a full mesh iBGP
If you take option 1 - the argument is one of scalability because you are redistributing BGP into OSPF or whatever IGp you have. Lots of routes here. Too many probably.
If you take option 2 - you still have to let transit routers in the AS know about the external routes. They must run BGP? If they don't, then the iBGP peers will enter all the BGP routes in the routing table (that's fine), but when they start forwarding to each other, the transit routers must also know about these routes or they will be dropped and black holed.
I think my summary is correct - if not, please let me know.
Question - what happens in the real world? What do ISP's and the like do? Which option?
Leave aside things like Route Reflectors for now - they just indicate option 2 to me - mesh.