野分です。

> こんな感じで使えばよいのでしょうか。

OKかと思います。
ただ、こうしたほうがスマートな気がします。

------------------8<------------------8=------------------
  class HtmlResult < OriginalBaseResult
    ------------------8<------------------8=------------------
    def changes( original )
      ori = HtmlResultCreator.tokenize( original )
      result = ""; idx = 0
      p ori
      @data.each do | i |
        result << ori[idx...i[0]].join
        result << "<del>#{i[1].join}</del>" if not i[1].empty?
        result << "<ins>#{i[2].join}</ins>" if not i[2].empty?
        idx = i[0] + i[1].size
      end
      result << ori[idx...ori.size].join if idx < ori.size
      result
    end
    ------------------8<------------------8=------------------

result = Algorithm::SimpleDiff::Diff.new( a, b, HtmlResultCreator).result
puts result.changes( a )


> メソッド名が patch でよかったのか自信がないですが…。

patchは、通常「修正後の文章を作成する」という目的で使用されるので、変更
が判るようにするメソッド名にはしないほうがいいと思います。
わたしだったら、changes とかresult_htmlとかですかね……

あと、再利用しない使い捨てコードなら、これでもOKですね。

result = ""
diff = Algorithm::SimpleDiff::Diff.new( a.scan(/\W+|\w+/), b.scan(/\W+|\w+/) )
diff.trace do | ori,mod,ori_pos,mod_pos |
  if ori.empty?
    result << "<ins>#{mod.join}</ins>"
  elsif mod.empty?
    result << "<del>#{ori.join}</del>"
  else
    result << ori.join
  end
end
p result