I could point you to http://www.valvesoftware.com/publications/2010/gdc2010\_vlachos\_l4d2wounds.pdf, which shows how to differentiate characters with wounds (in this case, zombies). Although it's good for zombies, you still need to actually generate unique characters.
Look through this http://www.seas.upenn.edu/\~cis568/presentations/animated-crowd-rendering.pdf, http://http.developer.nvidia.com/GPUGems3/gpugems3\_ch02.html, http://on-demand.gputechconf.com/gtc/2013/presentations/S3002-GPU-Crowd-Simulation-Analysis.pdf to get basic idea... I'll try to summarize.
You break your characters to several pieces (head, torso, legs, arms, ... w/e). You have several variantions for these (or you can parametrize them with bones f.e.), so you can make fat, thin characters, nice and ugly, etc. Next parametrization are textures. You make several face textures, different eye textures, etc. Again, you parametrize between them. You can also break face texture to several. One for face, one for hair, etc. This allows you to make bearded dwarves, black people, white people, etc. You can use different assets (different armor/clothes, boots, etc. etc.).
The thing is, the more things you can parametrize, the better the generator is. Although the people mustn't be somehow too strange (having huge arms, etc. - so you have to somehow clamp possible parameter values), and mustn't be too similar (which might be a problematic task).
Sadly I can't give you any example app or source for people ... as I currently use only schematic placeholders for characters.