As far as I know, you cannot dynamically change the width of bars in a bar chart.
If I'm understanding your issue though, you could try layering 2 bar charts on top of each other, with one chart, the top chart, showing Completed, and the bottom chart showing total. You could change the width of the Completed bars to be skinnier, and also make the chart transparent. This will give the end user the illusion that it is one chart, when in fact it is two.
You absolutely can. In your expression, or the script if you can, say if(isnull(sum([Brochures.RA Appprove Complete])),0,sum([Brochures.RA Appprove Complete])). This will put a 0 wherever there are no values.
Make sure you just uncheck "Supress Zero-Values" under the presentation tab.
EDIT: You'll also have to edit the Static Max in the top chart so that the numbers will line up. You can use =max(aggr(sum([Brochures.Total Qty Required]),Brochures.Class)) to make the max on the X axis the largest amount of your "Total Qty Required" expression.