I've created custom module, following the instruction in official docs. It works fine, but after ISPConfig updating, the module has gone (module files are removed). Is it normal behavior? What can I do to prevent update script from removing custom modules?
Yes. All files in /usr/local/ispconfig will be updated and replaced. I am not sure how you did your custom plugin but if custom plugin / config etc is changing the default one, it will be overwritten. You may need to be put it in a custom folder so it won't be affected. Edited: Not deleted but rather updated and replaced.
I have not edited existing module, but I've created the new one, placed in /usr/local/ispconfig/interface/web/mymodule directory. The /usr/local/ispconfig folder cannot be deleted, because I have also custom theme there and after update it is still in place.
Maybe your module is not activated for a client after the update. I use my own modules but i never had such an issue.