I'm reading the plugin developer guide, chapter 4, and reading some sample plugins, in this case gstgamma.c.

In chapter 4, it says:
"In the element _init () function, you create the pad from the pad template that has been registered with the element class in the _base_init () function. After creating the pad, you have to set a _setcaps () function pointer and optionally a _getcaps () function pointer. Also, you have to set a _chain () function pointer. Alternatively, pads can also operate in looping mode, which means that they can pull data themselves. More on this topic later. After that, you have to register the pad with the element. This happens like this:"

gstgamma sets a set_caps, transform_ip and before_transform functions, but does not set a chain function.
In my code that I started from boilerplate, set_caps is not set anywhere, but the plugin installs, and the trivial case displays video.  As I progress, I'm finding some functionality that I assume doesn't work because I need to initialize the capability.  For example, calling gst_video_format_get_component_width() complains because it says the format doesn't match.

I suppose I'm asking if these functions get added by default, and second, should I take the writers guide as truth, or more of a suggestion?