I was curious too, so I spent some time dissecting. Here’s the breakdown: https://drive.google.com/file/d/0B61Z1wMgyCh9XzFBMjl4bi1oejg/view?usp=sharing
You can see the actual bones and how they’re oriented if you tab into Edit Mode. Basically the squash & stretch is achieved with a “Stretch To” bone constraint, from the lower squash control to the upper one. The ball’s mesh vertices are assigned to that inner bone called Rotation. Since Rotation is parented to the stretching bone (squash_lower), the whole ball mesh also stretches with it.
If you haven’t done Fundamentals of Rigging yet, you should check that out.
It’s more or less the way shown here, although automatic weighting was used in this example: https://cgcookie.com/archive/creating-a-bouncing-ball-rig/