Edit in JSFiddle

require([
    'dojo/aspect',
    'dojo/json',
    'dojo/topic'
], function (aspect, JSON, topic) {
    // Listen to calls to topic.subscribe
    aspect.after(topic, 'subscribe', function (topicName) {
        // Create a map of subscribed topics
        // The map simplifies ensuring unique elements in the array
        topic.subscriptionMap = topic.subscriptionMap || {};

        if (!topic.subscriptionMap[topicName]) {
            topic.subscriptionMap[topicName] = true;
            // Create an array of subscribed topics
            topic.subscriptions = topic.subscriptions || [];
            topic.subscriptions.push(topicName);
        }
    }, true);

    // Listen to calls to topic.publish
    aspect.after(topic, 'publish', function (topicName) {
        topic.publishMap = topic.publishMap || {};

        if (!topic.publishMap[topicName]) {
            topic.publishMap[topicName] = true;
            topic.publications = topic.publications || [];
            topic.publications.push(topicName);
        }
    }, true);

    // Subscribe to and publish some topics
    topic.subscribe('/test/topic1');
    topic.subscribe('/test/topic2');
    topic.subscribe('/test/topic1');
    topic.publish('/test/topic3');
    topic.publish('/test/topic4');
    topic.publish('/test/topic3');

    // Display the captured topics
    log('Subscribed topics:');
    log(topic.subscriptions);
    log('Published topics:');
    log(topic.publications);

    function log (info) {
        var node = document.createElement('div');
        node.innerHTML = JSON.stringify(info);
        document.body.appendChild(node);
    }
});