He’s not painting the shadows but the transition from the two colors of the gradient node derived from the incidence (driven by the light/normal angle) by adding and subtracting colors based on the vertex paint.
You can also add or subtract intensity from a surface luminance node through a texture map. I see no reason to use a vertex map except for display, the lack of UVs, and maybe a bit of speed and non distorted UVs.
But I admit it’s not that straightforward as in XSI since the display in the viewport is closely related to the shading network you’re about to change which makes the workflow very annoying and slow.