Yes, you could do it manually. AFAIK it is not built in, so you would have to write a shader that reads a grayscale and converts that to a normal. The math should not be hard, and it would depend what you are doing.
I think for a traditional game it would be easier to do this in GIMP/Blender/Material Maker, etc. and get better results. But if your game was dynamically generated or procedural, then this wouldn't work.
You can search for "height map to normal map" you might find something. I found this code which appears correct (scroll down for the edit update): https://stackoverflow.com/questions/26045527/normal-map-from-height-map
Shouldn't be too hard to translate that to GLSL in Godot. Then you can read the texture image and save it to a PNG or whatever, or just leave it in memory.