Never mind:
I realised I can make ANY object act as the CalendarException wrapper, it doesn't have to be the
Custom Object. And if I use existing fields of the types required, I don't even need new custom
fields. So now I create a specially flagged Task some of whose fields are used to populate a new
CalendarException using a workflow rule. I added a new value to the TaskType picklist field called
'Calendar Exception' to distinguish these special Tasks from the rest and made the workflow trigger
on that.
I want to automatically delete these special Tasks once they've been actioned to prevent them from
accruing, so the rule above toggles a boolean field on the special Task that triggers a second work-
flow rule to delete the Task.
No custom objects or custom fields were used, just two workflow rules, to add the ability to create
CalendarExceptions via the API