blend /= dot(blend,1.0);How could it make the weights sum up to 1 (divide by sum of x+y+z)

fixed4 frag (v2f i) : SV_Target
{
// use absolute value of normal as texture weights
half3 blend = abs(i.objNormal);
// make sure the weights sum up to 1 (divide by sum of x+y+z)
blend /= dot(blend,1.0);
// read the three texture projections, for x,y,z axes
fixed4 cx = tex2D(_MainTex, i.coords.yz);
fixed4 cy = tex2D(_MainTex, i.coords.xz);
fixed4 cz = tex2D(_MainTex, i.coords.xy);
// blend the textures based on weights
fixed4 c = cx * blend.x + cy * blend.y + cz * blend.z;
// modulate by regular occlusion map
c *= tex2D(_OcclusionMap, i.uv);
return c;
}

The dot product is defined as:

dot(a,b)
{
    return a.x*b.x + a.y*b.y + a.z*b.z;
}

Of course your second parameter is not a vector, but HLSL just turns it into the vector (1,1,1). Specifically a vector of the same size as the other vector

Therefore the dot product calculates

(a.x*1 + a.y*1 + a.z*1)

The rest should be obvious. The a /= b operator is a short hand for a = a / b

So the total expansion of that line is

blend = blend / (a.x*1 + a.y*1 + a.z*1);

Which makes the sum of x, y and z to sum up to 1.0

Example:

blend = (6,2,8)

blend = blend / (6*1 + 2*1 + 8*1);
blend = blend / (16);

blend = (6/16, 2/16, 8/16)
blend = (0.375, 0.125, 0.5)

0.375 + 0.125 + 0.5 == 1.0