Markov text generator
I think answering my own question is justified here. (?)

While I have no design pattern advice for myself, I've just found a way to greatly improve the performance of setupFrequencies. The code as posted in my question iterates over the entire source text every time a new chunk is found, but it just occurred to me that such an inner loop isn't necessary at all.
Eliminating it not only shortens the code, but also reduces the runtime complexity from O(n²) to O(n) - a huge improvement, especially for longer source texts.

_setupFrequencies: function() {

    this.frequencies = {};

    // for each substring of length &lt;order&gt;,
    // create an array of characters that can follow it
    for (var i = 0; i &lt; this.sourceText.length - (this.order - 1); i++) {
        var chunk = this.sourceText.substr(i, this.order);
        if (!this.frequencies.hasOwnProperty(chunk)) {
            this.frequencies[chunk] = [];
        }
        var follower = this.sourceText.substr(i + this.order, 1);
        this.frequencies[chunk].push(follower);
    }

},