Extending Puppet

I wanted to learn about writing custom Puppet types and providers.
The official documentation is a little sparse, but I finally stumbled
upon the following series of articles by Gary Larizza that provide
a great deal of insight into the process and a bunch of example code: