Summary
Ansible is a great tool, however, sometimes it doesn't offer all the functionality one might desire. Not every bit of functionality is appropriate to support the main project, nor is it possible to integrate with custom proprietary data sources. For these reasons, there exist facilities within Ansible to extend the functionality. Creating and using custom modules is made easy due to shared module base code. Many different types of plugins can be created and used with Ansible to affect operations in a variety of ways. Inventory sources beyond what Ansible supports can still be used with relative ease and efficiency.
In all cases, there exists a mechanism to provide modules, plugins, and inventory sources alongside the playbooks and roles that depend on the enhanced functionality, making it seamless to distribute.