Вот, довольно простенький. Но работает и годен для промышленного применения.
То, что каждый экземпляр объекта созданный с помощью defineRule() - остается.
Нет. Точнее - можно, но весьма нетривиально. И не нужно, это на порядок сложнее и потребует очень хорошего вникания.
А чем стандартный Date неудобен?