TRUNCATE TABLE is treated for purposes of binary logging and replication as DROP TABLE followed by CREATE TABLE—that is, as DDL rather than DML. This is due to the fact that, when using InnoDB and other transactional storage engines where the transaction isolation level does not permit statement-based logging (READ COMMITTED or READ UNCOMMITTED), the statement was not logged and replicated when using STATEMENT or MIXED logging mode.
Long story short is that a "DELETE FROM [table_name]" *is* allowed during hot backups since it doesn't internally drop the table and recreate it.
So it would be nice if we had a central "empty table" method of some sort so that we can override it's function in one place vs. extending a bunch of models with truncate SQL queries in them. A bonus step further would be to have a standard toggle option (similar to the one for using "INSERT DELAYED" [which btw is a deprecated MySQL function and should probably just be removed as an option]) that lets you toggle between "TRUNCATE TABLE xxxx" and "DELETE FROM xxxx" as the underlying statement.