1. We have strong Product Managers here in the U.S.
2. We require passable English skills from all of our devs
3. We do daily standups and require participation from everyone (along with standard weekly meetings)
4. We have 1+ strong U.S. Engineer(s) per team
5. We've found a couple of agencies that really find and develop quality talent
We've been doing it for 7 years now. It has worked really well with the right agencies/countries (not India). In fact, in many ways these engineers out-perform most U.S. based engineers (aside from the top 10% of U.S. engineers). They tend to be hungrier and typically work harder. We don't use the cheapest foreign talent, but they are still a lot cheaper than U.S. engineers.
At this point, I would be unlikely to set up a team any differently.