True Normal vector does not take in account smooth shading. Use Normal vector instead.
By examining the matcap, we can say that we are already not too far away from the result. The colours in the corners of the matcap are:
Blue Violet Yellow Green
While in the preview we see:
Black Red Violet Green
Viewed from the top, Suzanne looks this way:
Colors ar much more similar to the normal matcap, which is in someway related with the coordinates of a sphere's point viewed from top (with a bit of easing)
Coming back to Suzanne, by rotating the Texture coordinates of -90° you'll easily get the colors from the top to be tranferred to the front:
Than by tweaking the values you may obtain a simlar result (or even better)
But this kind of shader will looks good only from one side: the front. Normal maps are in fact made to be viewed from one side only...it just a plain texture.
If the camera change its position, something must be elaborate to take in account the changing of the view point and re-elaborate the coordinates of the shaders. This can be done with the node setup you can find in this Blenderartist thread about creating a matcap shader in Cycles.
I'll report the nodetree in the image below:
The image texture is containing a pic of normal matcap mirrorball. In your case, the Transform vector output can also be used (after tweaking saturation and values) without the need of an external image.
This shader will look like a normal matcap from every point of view.