For the highest quality normal maps, you really want to sculpt textures in zbrush or mudbox. The problem is where do you start. Starting from scratch using masks can be time-consuming. You can start with a displacement map. But displacements derived from photos can cause artifacts and cleaning these up can be tedious. My solution is to generate displacements using an actual mesh and getting good results quickly. Here is my solution.
1. Start with a tileable texture. Paint the outlines of the brickwork that results in a mask texture. (this is the only tedious part)
2. Import texture into houdini and convert into geo (using trace sop)
3. Each brick is then iterated one by one (foreach sop) . For each iteration the sampled brick is extruded and beveled by a random amount. To establish a natural look, the amount of bevel is modulated by a nose texture along the edge. This creates a chipped edge look.
4. Each brick is also rotated slightly using a random seed.
5. The mesh is converted into an isosurface to give it a more organic shape and remove meshing errors.
5. At this point a depth map is exported from houdini as a 32 bit OpenEXR file.
6. In mudbox/zbrush you can use this as a displacement which will already give you a very organic base sculpt to start from. You can then sculpt as usual to build up detail.
7. This gives you nice normals and a very accurate depth map that can be used in blending shaders.
This is the final result. I spent 30 minutes to get to this point form start to finish, the key was to get a good base displacement from actual geometry without having to do a bunch of tedious modeling.