Assuming the object is always going to be aligned to a plane, flat or slope, the normal of the object could be mixed to an object-aligned ‘up’ normal, that will match the plane the object is placed on.
The normals are inverted in Blender Internal/GLSL viewport shading, that’s why an upwards normal vector is (0.0, 0.0, -1.0).
This also assumes the terrain does not have normal maps.