general token objects, to be used fo replacements in any place where TokenReplace (TR) is available (currently System Messages, Bulkmail, in DNN 5 Text Skin Object, Text/HTML and several other modules), can only be specified in the core framework. Modules can extend TR by subclassing and use either qualified (like [object:property]) tokens or objectless tokens (like [TEXT]), which can be used in either instance of the module, e.g. your customized Text/HTML module can provide a admin module to specify portalwide variables and their values, which can be used in any instance of your module in the portal. The easiest way is passing a custom array of strings, when creating the TR, which can be used in tokens as [Custom:1], [Custom:2] etc. Adding any custom object and property names would require the controller to implement IPropertyAccess and declaring a subclass of DotNetNuke.Services.Tokens.BaseCustomTokenReplace including your token object. I am currently working on a more detailed description of token replace, but as usual, this takes some time.