How I create my textures:
1. I take photos of the material. As a rule, I take lots of photos of the same place to capture the most precise texture. I take photos when the weather is cloudy to minimize rough shades.
2. I make a tiled diffuse map in Photoshop and check how it looks when multiply repeated.
3. Using the diffuse map I make a 3D model in 3D max.
4. I bake a normal map and a height map. These maps I'd call basic. It's not the final result, but just a rough piece that ensures a future texture would have regular form.
5. Using the diffuse map I generate lots of variations for the normal and height maps in Crazybump. Some of them would be used to make detailed stone joints, others – to create the general texture.
6. Using masks I mix the basic maps with variations, so that the final result looks as good as possible.
Final result:
I guess, that's all. The process takes time, but it's my hobby, so I don't complain.