 				if val of ATTR_PRIMITIVE_VALUES
 					val = ATTR_PRIMITIVE_VALUES[val]
 
-				if val?
-					switch typeof obj[prop]
-						when 'number'
-							val = parseFloat val
-						when 'boolean'
+				switch typeof obj[prop]
+					when 'number'
+						val = parseFloat val
+					when 'boolean'
+						if val is ''
+							val = true
+						else
 							val = !!val
-						when 'string'
-							val = val+''
-
-				if typeof obj[prop] is 'function'
-					unless typeof val is 'function'
-						log.error "#{name} is a signal handler and expects function, but #{val} got"
-						continue
+					when 'string'
+						val = val+''
+
+				if typeof obj[prop] is 'function' and typeof val is 'function'
 					obj[prop] val
 					@attrListeners.push obj, prop, val
 				else
+					`//<development>`
+					if typeof obj[prop] is 'function' and not utils.lookupSetter(obj, prop)
+						log.error "#{name} is a signal handler and expects function, but #{val} got"
+						continue
+					`//</development>`
+
 					unless @setAttrs[name]
 						@setAttrs[name] = true
 						@attrValues.push obj, prop, obj[prop]

			child.revert()

		# shared items
		if itemDocumentNode._documentStyle is @
			# revert linkUri
			if @isLinkUriSet
				@item.linkUri = @baseLinkUri

			@item.linkUri = @getLinkUri()

		# text changes
		if @getTextObject()
			listenTextRec @

		return;
