When?i.e. TOS utilizes only d0/a0 as the scratch registers
When calling GEMDOS? Yes, it is often the case. But it does not mean that d1/d2/a1/a2 will always be preserved. They must be backuped before any trap #1, just in case.
Do you mean "preserved" when you write your own trap #1 hook?
No, C functions compiled with GCC only trash d0/d1/a0/a1.
If this is true, this should be documented.
But I believe that the rule varies across TOS versions *and* different function numbers.