This problem is gating a project at my company. However, this is a very simple problem to solve and is well understood in the realtime graphics literature. I suspect it should only require about three lines of code to change, albeit buried somewhere deep within the UE4 shader generation code.
When normals are transformed inside the body of a shader, they should be multiplied by the INVERSE TRANSPOSE of whatever matrix is used to transform the vertex coordinates. This can typically be computed once and passed into a shader uniform variable. This will correctly account for nonuniform scaling of meshes, and does not require any CPU-side recomputation of anything.
Please see the following references which explain how to solve this problem:
http://web.archive.org/web/20120228095346/http://www.arcsynthesis.org/gltut/Illumination/Tut09%20Normal%20Transformation.html
http://www.lighthouse3d.com/tutorials/glsl-12-tutorial/the-normal-matrix/
https://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations#Transforming_Normal_Vectors