Is this for use in a real-time game or as a high-accuracy simulation? If you're just looking at it as an effect for a game, then it's quite possible that you could get away with using a procedural texture, determined by CPU, combined with a vertex-shader to move your vertices about as desired at run-time.
If you're interested in accuracy, then you would need to take into account various material properties, such as Young's Modulus, limit of elasticity, Hardness, etc. (I'm not a material scientist so I don't know all of the variables affecting plastic/elastic deformation). I guess you'd first determine how accurate you want your simulation to be, and then just use this article to find out what variables you need, and then search for each of those variables for each material you want (this site is useful). You would then presumably have a very-high polygon object, or tessellate it as necessary.
I also imagine you would have to have per-vertex collision detection, to ensure you don't end up with impossible shapes (self-intersection tests etc.), also, you could use the tessellation feature in DirectX 11, as mentioned earlier, to help smoothen your shape as you deform it (a cube only needs 6 faces, but when morphed you'll need to add more faces).
Hope this helps, I'd like to see how your project progresses! :)