yes, but the blendmap method is waaaayyyy more flexible.

Code:
float4x4 matWorld;
float4x4 matWorldViewProj;

float4 vecSunDir;
float4 vecAmbient;
float4 vecSunColor;
float2 tiles = {50,50};

texture dmap1_bmap;
texture dmap2_bmap;
texture dmap3_bmap;
texture dmap4_bmap;
texture dmap5_bmap;

sampler2D skin1 = sampler_state {	Texture = <dmap1_bmap>;mipfilter=2;minfilter=2;magfilter=2;};
sampler2D skin2 = sampler_state {	Texture = <dmap2_bmap>;mipfilter=2;minfilter=2;magfilter=2;};
sampler2D skin3 = sampler_state {	Texture = <dmap3_bmap>;mipfilter=2;minfilter=2;magfilter=2;};
sampler2D skin4 = sampler_state {	Texture = <dmap4_bmap>;mipfilter=2;minfilter=2;magfilter=2;};
sampler2D skin5 = sampler_state {	Texture = <dmap5_bmap>;mipfilter=2;minfilter=2;magfilter=2;};

void VS (	in float4 iPos : POSITION,
		in float3 iNorm : NORMAL,
		in float4 iTex : TEXCOORD0,
		out float4 oPos : POSITION,
		out float3 oNorm : TEXCOORD1,
		out float4 oTex : TEXCOORD0,
		out float y : TEXCOORD2)
	{
	oPos = mul (iPos,matWorldViewProj);
	oNorm = mul(iNorm,matWorld);
	oTex = iTex;
	y = mul(iPos,matWorld).y;
	}

float4 PS(	in float2 tex : TEXCOORD0,
		in float3 normal : TEXCOORD1,
		in float y : TEXCOORD2) : COLOR {

	float4 color = tex2D(skin1,tiles * tex);

	color = lerp(color,tex2D(skin2,tiles * tex),saturate((1500-y) / 100));
	color = lerp(color,tex2D(skin3,tiles * tex),saturate((1000-y) / 100));
	color = lerp(color,tex2D(skin4,tiles * tex),saturate((500-y) / 100));
	color = lerp(color,tex2D(skin5,tiles * tex),saturate(1-pow(normal.y,1)));	

	color *= vecSunColor * saturate(dot(-vecSunDir, normalize(normal))) + vecAmbient;	
	return color;}

technique t{ pass p{	AlphaBlendEnable = 0;
			zWriteEnable = 1;
			VertexShader = compile vs_2_0 VS();		
			PixelShader = compile ps_2_0 PS();			
		}}



you can (must) play around with the values in the pixelshader to fit your needs (example):

color = lerp(color,tex2D(skin2,tiles * tex),saturate((1500-y) / 100));

the 1500 is the height in quants and the 100 is the smoothness. The last texture is blended according to the surface normal. I'm not sure if this is what you looking for, but it's worth a try. You could also combine both techniques. (blendmap + height-dependend)