Actually, I think the Asciidoctor Java integration is behaving correctly here. This is really just a deficiency of Maven.

Maven cannot see the difference between a null value and an empty string. Hence, we need the boolean to represent a null value, allowing us to use null to represent an empty string. Yes, it's screwy, but from the perspective of the user it looks like what they expect.

Now, this does bring up the question of whether the Asciidoctor Java integration show allow boolean values to be passed into Asciidoctor. To be honest, I'm not sure yet. It's something I think we should put on the table for consideration. Even though Asciidoctor doesn't recognize values other than strings, custom backends may want this information. We don't want to lock it down prematurely.

...now, having said that, there is on thing that could be changed in the Java integration here. I do thing that a false value should be passed on as a null value and a true value passed as an empty string. That's because internally, null values are treated as "disable this attribute" and empty string is treated as "enable this attribute". Hence, it's just consistent. I think that's a good change for now. 

If, in the future, we decide the boolean values are needed, we can always rethink it.