I did with the Sponza model 
You should give it a try to see if you can display it correctly (the model is not perfect, but it is free)
Maybe not the best way to do it, but it works with my deferred engine:
After this loop, calling base.Process should build the model with the new textures
note:_swLog is just an object writing debug infos to a file.
//Add the keys to the material, so they can be used by the shader
foreach(GeometryContent geometry in mesh.Geometry)
{
//Prevent crashes when building. It can happen with models found on the web
if(geometry.Material == null)
{
_swLog._w("****geometry.Material is null****", true);
_swLog.Flush();
continue;
}
if(geometry.Material.Textures == null)
{
_swLog._w("****geometry.Material.Textures is null****", true);
_swLog.Flush();
continue;
}
/* Replace _NormalMapKey with DualTexture2 for example:
the name must match the shader's texture parameter
Mine is NormaMap in my shader, so _NormalMapKey is "NormalMap"
*/
if(geometry.Material.Textures.ContainsKey(_NormalMapKey))
{
ExternalReference<TextureContent> texRef = geometry.Material.Textures[_NormalMapKey];
geometry.Material.Textures.Remove(_NormalMapKey);
_swLog._d("NORMAL texRef=" + texRef.Filename, 1);
_swLog.Flush();
geometry.Material.Textures.Add("NormalMap", texRef);
}
else
{
geometry.Material.Textures.Add("NormalMap", new ExternalReference<TextureContent>(normalMapPath));
_swLog._d("NORMAL MATERIAL SPECIFIED normalMapPath=" + normalMapPath, 1);
_swLog.Flush();
}
//Example 2
if(geometry.Material.Textures.ContainsKey(_SpecularMapKey))
{
ExternalReference<TextureContent> texRef = geometry.Material.Textures[_SpecularMapKey];
geometry.Material.Textures.Remove(_SpecularMapKey);
_swLog._d("SPECULAR texRef=" + texRef.Filename, 1);
_swLog.Flush();
geometry.Material.Textures.Add("SpecularMap", texRef);
}
else
{
geometry.Material.Textures.Add("SpecularMap", new ExternalReference<TextureContent>(specularMapPath));
_swLog._d("SPECULAR MATERIAL SPECIFIED specularMapPath=" + specularMapPath, 1);
_swLog.Flush();
}
//... etc
}