Transparent Diffuse Specular Normal Shader problem

I’m trying to create a shader that uses separated alpha, specular and normal maps along with a color texture, but I’m having some strange problems with it and I can’t figure out what’s wrong.

Here’s my shader:

Shader "Custom/DiffuseAlphaNormalSpecular" {
Properties {
    _MainTex ("Diffuse", 2D) = "white" {}
    _AlphaMap ("Alpha", 2D) = "white" {}
	_BumpMap ("Normalmap", 2D) = "bump" {}
	_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
	_SpecularMap ("Specular", 2D) = "white" {}
	_Shininess ("Shininess", Range (0.01, 1)) = 0.5
}
SubShader {

    Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
	LOD 300

    CGPROGRAM
    #pragma surface surf BlinnPhong alpha decal:blend

    sampler2D _MainTex;
    sampler2D _AlphaMap;
	sampler2D _BumpMap;
	sampler2D _SpecularMap;
	half _Shininess;

    struct Input {
        float2 uv_MainTex;
        float2 uv_AlphaMap;
		float2 uv_SpecularMap;
		float2 uv_BumpMap;
    };

    void surf (Input IN, inout SurfaceOutput o) {
        half4 d = tex2D (_MainTex, IN.uv_MainTex);
        half4 a = tex2D (_AlphaMap, IN.uv_AlphaMap);
		half4 b = tex2D (_BumpMap, IN.uv_BumpMap);
		half4 s = tex2D (_SpecularMap, IN.uv_SpecularMap);

        o.Albedo = d.rgb;
        o.Alpha = Luminance(a.rgb);
		o.Normal = UnpackNormal(b);
		o.Specular = _Shininess;
		o.Gloss = s.rgb * o.Alpha;;
    }
    ENDCG
} 
FallBack "Transparent/Diffuse"  
}

and here is the problem:

Shader problem

This might be a bit late, but I found this question while looking for solutions to my own problems. The problem is (the lack of) self sorting when rendering a semi transparent mesh.

See http://forum.unity3d.com/threads/68636-Alpha-transparency-self-sorting-issue-help-really-appreciated

One solution that mentioned in the forum thread is to first draw a depth only pass with a non-transparent shader and then render the transparent shader on top. You might get other artifacts from that, including stuff not being rendered under the character, so it’s probably best to render it after everything else setting “Queue”=“Transparent+100”