rather than adding a conditional in the base corehq definition of reports for this, it would be better to add a module-level variable like REPORTS for specifying whatever changes can be applied for a domain.

This avoids a bunch of domain-specific logic in one place that would get really hairy to maintain the more gets added to it, in favor of a defined interface that can be used over and over in each custom module without decreasing maintainability.

Say, MESSAGING_REPORTS, and then 

messaging_reports += getattr(Domain.get_module_by_name(project.name), 'MESSAGING_REPORT', [])

This is an example of the maintainability benefit of seeking declarative definitions.