Just a supposition here but a way to go without artifacts could be mesh conforming :
in short casting your mesh B onto your mesh A, easy to implement with morphed planes but could be a whole other issue with closed meshes.
What you need to do is create a function which will approximate the new point coordinates based on a set of points (as you have greater count with mesh A) and remap the point, kill the triangles, recreate the triangles the normals and then interpolate...
Mesh conforming demo
EDIT : one of the simple way to do that would be to approximate new base position based on the same vertex index than the one of mesh A ex:
Mesh A 20 Vertices
Mesh B 10 Vertices
Kill Mesh B triangles
Set Mesh B Vertices in index Order using for ex :
VertexPosMeshB = (VertexPosMeshA + VertexPosMeshA)/2; //scaling down to the actual size of Mesh B and approximating to fit previous pos
Re create Triangles in Index order or with a home made algo fitting the mesh shape.
then Interpolate mesh B vertices over time until it fits the state you want
WARNING : If you mesh counts are too far apart of course you will have some weird results, try looking for Tesselation then to make your mesh with less poly conform to the one with more poly without "actually" being forced to keep the exact same number of vertices when you create your meshes.
A mix of tesselation and approximation algorithm could do the trick i believe