Here is an effect I created using the infamous NVEffectsBrowser. This is using a texture map with N * L encoded in RGB and N * H encoded in A (alpha). It then uses a normal map and looks up the final output color from the N*L + N*H texture map. The source code can be found here