When you render a traingle with vertex colours, the colour of any pixel in the triangle is based on the 'distance' from the vertices.
So if you had two white and one black vertex, the triangle would be a gradient from white to grey.
This "should" be enough.
I don't think it's an ideal solution. The problem is that the distances between vertices are not equal, they are sometimes quite long - this applies especially to wings. For example, if you think about the Spitfire Mk.IX which has those radiators poking out of the underside of the wing at almost 90 degree angle, the vertices separating the wing and radiator are in the "corner" and thus ends up being a bit more occluded by the geometry than the rest of the wing.
Since the vertex colouring relies on averages, it can cause weird stuff like an occluded vertice's dark values spreading outward along the wing further than they should.
Here's what I mean. Imagine this is the mesh of an aircraft's wing's underside, with a radiator protruding from it:
Now let's assign each vertex a colour based on how occluded it is by the model:
Note that the points on the corners of the protrusion are different colour from the single vertex "on" the edge - the points on corners are more "open" and less occluded, but that shouldn't affect the occlusion of points along the edges...
The problem becomes apparent when you apply the vertex colours to the faces - this is just an approximation made in GIMP, but displays the problem well:
See how the darkness spreads to places where it will look odd?
With per-pixel ambient occlusion, the result should appear more like this:
Besides, vertices and edges are a discontinuity - mathematically speaking, you can't define a tangent plane or normal vector for them. And you should have that to define the cone of rays you're using for occlusion checking. It becomes difficult to define proper ambient occlusion for them. On the other hand, you CAN define it for pixels on the faces of the mesh.
Doing it per pixel in the texture is far more difficult because I have to work out which triangle in the mesh a particular pixel is contained in (and of course it could be more than one, it's common to use the same part of the texture for multiple triangles.), then do the ray tracing.
But if you do it by applying vertex colours to the texture you still need to somehow define which colour should represent which pixel.
If you do it per-pixel to begin with, it's the same problem - just in reverse. The UV coordinates should, by definition, give you the information of where on the model's surface a particular pixel should be in. Unfortunately my knowledge of this matter is limited to theory, rather than practical experience...
I'll give my way a try first and we can see what it looks like.
It's a good idea to experiment, after all I could be totally wrong about this.