It's certainly not a rule, just an observable phenomena, working in IBM with colleagues in Hyderabad and at Google partnering with Intuit in, IIRC, Bangalore.
It's a cultural difference: in India, people become engineers because it carries prestige. They don't code because they love computing (this is measurable: ask how many outsourced engineers have GitHub accounts). The lack of actual interest in their profession demonstrates itself in their work.
The best Indian programmers I've met have either left India or weren't born there in the first place, in either case I'd consider them westerners.
I've worked with 10 Indian employees that could easily be replaced with a single competent westerner (of any descent whatsoever) for 1/3 the price.
Funny. IIRC, in One Night @ The Call Center, Indian call center employees are told that a 35-year-old American has the intelligence of a 10-year-old Indian. Ouch.
When I started working with colleagues in ISL (and, later, CDL), i would concur. But, dammit, the ones i worked with learned FAST. And they were smart. The guys in CDL seemed to work 24x7 - on their schedule and on the north american time schedule. Like..when do they sleep?
Many western engineers, including many people of Indian origin in the US or UK, would also be 10x more productive than an individual in an outsourcing company hired based on the low cost of labor.
If by "onshore" you mean China, then you'll probably get your wish. Otherwise, probably not.