A reliable way to remove consecutive appearances of a substring
Your code looks like it does exactly what you want to me.

Some notes:


StringBuilder methods (which you're emulating by using an extension method) return the modified StringBuilder, so they can be used in a fluent manner. You should probably do the same.
I don't like changing the index of a for loop. Especially since i-- means “stay at the same index”, I think that's confusing. You should use a while loop instead.
You can shorten your code by quite a bit by using Regex:

public static string RemoveConsecutive(string text, string value)
{
    // validation omited

    string regex = string.Format(@"({0})+", Regex.Escape(value));
    return Regex.Replace(text, regex, match =&gt; value);
}


Shorter code is usually less error prone. But in this case, I'm not so sure about that, because there are some intricacies in this code:


Calling Escape() is crucial if value contains some regex special characters (e.g. *).
If the value was used directly as the replacement (instead of a delegate), it wouldn't work correctly if it contained any substitution (e.g. $0).