The solution here is to improve your ETL / ELT process so you don't end up with empty tables. Switch to an incremental approach, or some kind of passive-active architecture with your database servers. The other approaches will complicate your life and the lives of your users. Even so, here they are, in case you have no control over the data situation:
1) You could do this, but not dynamically for any and all content. You'd need to write a script that ran every N minutes, checking for the rowcounts in the tables you're concerned with. Assuming there is data in them, or some "reasonable threshold" is exceeded, then it can call tabcmd runschedule , and execute a custom extract refresh schedule on Server. All of the workbooks and data sources relying on this data would need to be set to this schedule, and you'd need to disable it in Tableau Server so it didn't run on an automated self-schedule. You might actually need to create several different of these schedules depending on how often the extracts needed to be run.
2) Each dashboard author would have to build this into their own dashboard. They'd need to allocate some space to a pane that would show some kind of indicator as to how fresh the data was, or how correct it was. It could potentially be based on a database view you constructed to make it easier for multiple authors to use. Say, a view that returned a TRUE or FALSE value depending on various checks you ran against table rowcounts and such on the back-end. Then they just build a viz on top of it that shows a green or red mark, depending on what the result is. They could create a tooltip that explained what each meant to the user reviewing it. You could not feasibly implement something server-level that automatically switched the content in each viz based on data situations.
3) I don't really think this is feasible. If the extracts run successfully against a set of empty tables, the old extract is gone. You could technically have a separate copy of the dashboard that doesn't refresh its extract until the end of each business day, while the primary version refreshes before each business day, and then refer the user to the older version in the event that the dashboard is blank.