Your 1st issue is due to an inconsistency between the documentation and the current version of the code for the <<newinventory>> macro. I have notified ChapelR of this inconsistency.
Your 2nd issue may be due to a misunderstanding about what the defaultStings option is for.
A number of the macros included with Simple Inventory Library automatically output a text message under certain conditions, one such macro is the <<inventory>> macro which outputs a pre-determined message if the passed inventory variable contains no items. (is empty).
The defaultStrings option allows you to change some of these pre-determined messages, such as what is displayed by the <<inventory>> macro when an inventory is empty.
eg. Adding the following to the correct location within the Story Javascriprt area will change the empty inventory message from its default of "The inventory is empty..." to be "Narda, Nothing, Zilch!" instead.
setup.simpleInv.options.defaultStrings.empty = 'Narda, Nothing, Zilch!';
Your 3rd issue is due to you using the wrong technique to programmatically check if an inventory is empty.
The purpose of the <inventory>.has() function is to check is an inventory contains a specific String value, this means that your <<if $backpack.has('')>> code is actually checking if the backpack contains an Empty String value and not if the backpack is empty.
There isn't currently a documented method to programmatically determine if an inventory is empty, and I have notified ChapelR about this.
WARNING: The following temporary solution relies on an undocumented feature of the Simple Inventory library, and as such it shoud be used with caution as it may cease working in the future.
Each inventory variable currently has a hidden property named inv which references the Array used to contain that inventory's items. The length property of that Array can be used to determine how many items are in that inventory.
<<if $backpack.inv.length === 0>>
The Backpack is empty, do something..
<</if>>