1) generate the grass-vertex normals the standard way, fetch the terrain normal under each blade and merge them in a 30%/70% fashion to get decent grass normals; as discussed @AckCon
2) Try to add weights to the grass vertices to let the upper vertices wave more than the lower vertices. If it is one mesh, you cannot predict if a vertex is an upper blade or a lower blade-part, so you could write that apriori into the vertices during creation! Then, evaluate the weight in the vertex shader and use that as waving-factor.
3) to get a denser look, try bending the grass-quads along the viewing direction in the vertex shader. That sounds like an awful idea, but looks good in practice.
4) if you reached some kind of density, you can fake AO if you assume that the lower parts of your blades are occluded while the upper parts are lit and pass light, since grass blades are by nature translucent. So no need for costly SSAO here.
5) if you want to use SSAO, then do it on the scene while the grass is clipped and render the grass after that with the trick mentioned in 4. With a screen space shadowmap, you could even influence the grass shading by a lookup on the shadowmap.