I just branched my standard shader into a special character shader that allows three areas to have different colors per mesh instance - skin, hair and eye color.
I have also modified the terrain shader to use gray-scale detail textures instead of color textures. This makes it possible to combine four detail textures into one texture, one for each channel, resulting in less texture fetches. I use a base color layer on the terrain to bring back the colors and the detail textures are also used as height maps to calculate a nice per pixel normal. All in all this saves a couple of texture fetches and quite a lot of texture memory as only two textures are used instead of 9 (1 base + 1 detail compared to 1 base + 4 detail color + 4 detail normal).