Lets say you have a reference object (Red) and a deformed object (Blue), while both have the same mesh structure, the vertices indices are different, we want to align the vertices indices so that we can create proper shape keys and smooth morphs.
The solution rely on computing a look up table for vertices based on their closest vertex in the reference object using a KD Tree. In order for this to work, an instance with the same indices structure of the deformed object has to roughly align with the reference object, if the deformation is too extreme, you will have to try to align the deformed object manually someway. This can be done by snapping the vertices manually, roughly aligning them using sculpting or proportional editing, for instance, I am going to duplicate the deformed object and try to align it using proportional editing:
It doesn't have to be precise, it just have to good enough for the algorithm to work.
Then we are going to send that to Animation Nodes where we sample both the vertices locations of the reference object and the duplicated object we just edited. Then I am going to create a KD Tree from the reference object's vertices locations and use the Find Nearest Point Node to find the indices of the nearest vertices in the reference object. If we view the indices of the vertices of both objects and cross reference them with the output indices in the node tree, we will find that they indeed match:
Notice that the output list tells us that the vertex at index zero should be at index 32, the vertex at index 1 should be at index 15, the vertex and index 2 should be at index 22, and so on. If we now get the vertices from the deformed mesh at the output indices, we will get the vertices in the same order as the reference object but in the locations of the deformed object:
The edges and polygon indices of the new mesh are that of the reference mesh. All you have to do now is output the mesh and use it to create your shapekeys.