I've managed to figure it out (thanks Kevin B for your input)
It was the following line causing the problem, and had to be unbound in the callback function itself:
$("#lims_gettext_respond").click(cb);
So the adjusted PrepareScanner function is:
function PrepareScanner(row) {
var codes = $("#barcode" + row).size();
var txt = (codes == 1 ? "first" : "next");
getText("Please scan " + txt + " barcode", function() {
var bc = $("#lims_gettext_value").val();
$("#barcode" + row).append("<option value=1>" + bc + "</option>");
$("#lims_gettext_respond").unbind("click");
});
$("#lims_gettext_value").focus();
$("#lims_gettext_value").val("");
return;
}