Great sample. Thanks Andrie. I did not read all the posts but I did find an issue. You have:
this.fireEvent('change', this, this.oldValueArray, this.valueArray);
this.fireEvent('change', this, this.oldValue, this.getRawValue());

In itself, that is fine but it does not match the api for the combobox. It should be:
this.fireEvent('change', this, this.valueArray, this.oldValueArray);
this.fireEvent('change', this, this.getRawValue(), this.oldValue);

For my purpose, I also had to comment out:
this.valueArray = resultRaw; (line ~502)

That seemed to replace a set value when moving to other combo boxes. I am using 7 of your multi select combo boxes on one page. I do have an issue that I have work around but could not fix the code. I have listeners ('change') in each combo box. The newValue and oldValues work fine. There is a miss fire that messes it all up. If I make a selection from one combo box, all is fine. When I go to click on a different box, the onchange is fired on the first combo box twice. The first fires is ok. The second on the first combo box replaces the newValue with a string of results instead of an array of results. So the string is a comma separated from of the array. I could not figure out a fix for that so instead of using the newValue and oldValue in:

'change': function (combo, newValue, oldValue)

I am using the this.valueArray, this.oldValueArray as the work around. Did anyone encounter that issue? Thanks.