How to emit hair particles according to the normal of the emitter face?
This is caused by weights to some degree - as weights are added to vertices they are interpolated on the faces sharing those vertices. Hence mesh in the file above doesn't have vertex group affecting only top face rather top face plus part of faces below:



Particles will appear everywhere where weights are more than 0 which in this case includes top part of side faces as well. The proximity there will be less but enough to prevent from clear emitting only from the top.

One thing to try is to inset top face and weight paint only it:



This should guarantee particles disappearing from the sides but will still allow appear more than one around the top face as now weights are interpolated around the face which was insetted:



Hence Particle per Face won't really work here.
Another way is to join that Ngon into vertex at center and emit from vertices:



Likely the best way is making several particle systems and using each one for every special case.
Or using dupliverts / duplifaces, where there will be object duplicated via dupliverts instead of particle system. As dupliverts allow less control over position / randomizing / rotation etc. it could be used only for cases where strict rotation is acceptable.