Multimesh is not the same as
MeshInstance. The former refers to usage of hardware-instancing, which is the ability to draw many times the same mesh at low cost in a single draw call.
1) Yes, you can do this with
SurfaceTool, or generating the vertex and index arrays directly
2) It's you to decide. Generating one mesh will make... one mesh. You can use the same mesh on multiple
MeshInstances, or have a unique mesh for all instances.
3) You can have different materials per
MeshInstance with the
material_override property, which will override any eventual material found in the mesh used by the instance. So you can re-use the same mesh on multiple instances and still be able to have different materials (only supports one override though).
Mesh API is up to you.
ImmediateGeometry is good for geometry that changes every frame.
SurfaceTool is good for generating an actual mesh that won't change later on. Using the
Mesh API directly is good if it's easier for you to generate vertex arrays, normals and indices manually.