I'm currently using gphoto2 to interface to my Canon EOS M100 and remotely control it. One feature that I really need is the ability to display images on the camera's lcd screen so it can be previewed. Unfortunately, gphoto2 does not provide such support. It looks like I need to develop my own driver to interface to the camera but to get started I need to know if Canon provides SDK documentation? So far I haven't been able to find anything, though something must exist since gphoto2 exists?
I'm not quite sure what exactly you mean by preview image though. If you mean the live view, gphoto2 should be able to do that, the Canon SDK definitely can.
In any case, Canon does provide a documentation for their SDK (the EDSDK: EOS Digital SDK) but it has a very similar feature set than gphoto2. The documentation only covers how to use the software though, not the actual protocol.
gphoto2 reverse engineered the PTP commands Canon cameras use.
PTP is the protocol most cameras use. It provides a few commands like taking a photo or accessing files on the camera but a lot of the functionality is usually done with proprietary commands defined by the camera vendors.
To add custom behavior to the camera itself you'd need to write your own software in the style of Magic Lantern. Canon does not provide any documentation for that either, it's all reverse engineering.