Unity 5 fragment shader that writes custom depth into the depth texture

Hello there.
So im trying to write custom depth for the object with my shader (i want to turn a quad, into a circle), but it doesnt seem to do absolutely anything.
Heres my current shader:

Shader "Custom/My Metaball" {
Properties {
	_Color ("Main Color", Color) = (1,1,1,1)
	_MainTex ("Base (RGB)", 2D) = "white" {}
	_Cutoff("CUTOFF", Range(0,1)) = 0.1
SubShader {   
		ZWrite On
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"
            uniform sampler2D _MainTex;
            uniform float _Cutoff;
            struct v2f
                float4 position : POSITION;
                float2 uv : TEXCOORD0;
            struct fragOut
                half4 color : COLOR;
                float depth : DEPTH;
            v2f vert(appdata_base v)
                v2f o;
                o.position = mul(UNITY_MATRIX_MVP, v.vertex);
                o.uv = v.texcoord;
                return o;

            fragOut frag(v2f i) : COLOR {
            	fragOut o;
            	fixed4 col = tex2D(_MainTex, i.uv);
            	o.color = col;
            	o.depth = 0;
            	return o;

//Fallback "Diffuse"

Im setting the depth to 0 just for test purposes.
If i uncomment the fallback, then it does standard depth writing, but with commented fallback - no depth output. Am i doing something wrong? Is it not possible at all? Ive seen some folk do this on forums.

For anyone still struggling with this:
The above shader DOES WORK, but it’s writing directly to the DEPTH BUFFER used to check polygons depth against each other.
It does NOT write to the user accessible DEPTH TEXTURE wich is generated by Unity when you set a camera to generate a depth or normal+depth TEXTURE. (using Camera.depthTextureMode)
The depth TEXTURE is different than the actual depth buffer used internally to check polygons against when rendering. The DEPTH TEXTURE is generated by Unity manually with an extra pass in forward mode (rendering everything in the scene once again using Replacement Shaders) and in deferred render Unity will just direct you to the internal GBuffer2 were normals and depth are always rendered.
This means you will have to modify the internal deferred shader that generates depth and normals in deferred mode or you will have to modify the internal depth and normals replacement shader for it to work in forward mode.
It’s quite complicated, but just keep in mind the DEPTH BUFFER you are writing to inside your shader IS NOT THE SAME as the Depth Texture Unity generates for you when you use Camera.depthTextureMode. This is for compatibility reasons, since some build targets can’t read info from the native depth buffers, only write in it. (android, iOS…)
Unity generates the Depth Texture manually as a way for the user to read the depth of the image even when the build target can’t do it natively.
Also, keep in mind the shaders that write directly to the depth buffer like the one posted above are VERY SLOW to render even on modern Desktop hardware. You should avoid this: it will cut your frame rate by half.