Regen all docs. (#700)

* Stop recursing if discovery == {}

* Generate docs with 'make docs'.
diff --git a/docs/dyn/cloudbilling_v1.services.skus.html b/docs/dyn/cloudbilling_v1.services.skus.html
new file mode 100644
index 0000000..e2f21bc
--- /dev/null
+++ b/docs/dyn/cloudbilling_v1.services.skus.html
@@ -0,0 +1,243 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="cloudbilling_v1.html">Cloud Billing API</a> . <a href="cloudbilling_v1.services.html">services</a> . <a href="cloudbilling_v1.services.skus.html">skus</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#list">list(parent, pageSize=None, currencyCode=None, startTime=None, pageToken=None, endTime=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists all publicly available SKUs for a given cloud service.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="list">list(parent, pageSize=None, currencyCode=None, startTime=None, pageToken=None, endTime=None, x__xgafv=None)</code>
+  <pre>Lists all publicly available SKUs for a given cloud service.
+
+Args:
+  parent: string, The name of the service.
+Example: "services/DA34-426B-A397" (required)
+  pageSize: integer, Requested page size. Defaults to 5000.
+  currencyCode: string, The ISO 4217 currency code for the pricing info in the response proto.
+Will use the conversion rate as of start_time.
+Optional. If not specified USD will be used.
+  startTime: string, Optional inclusive start time of the time range for which the pricing
+versions will be returned. Timestamps in the future are not allowed.
+The time range has to be within a single calendar month in
+America/Los_Angeles timezone. Time range as a whole is optional. If not
+specified, the latest pricing will be returned (up to 12 hours old at
+most).
+  pageToken: string, A token identifying a page of results to return. This should be a
+`next_page_token` value returned from a previous `ListSkus`
+call. If unspecified, the first page of results is returned.
+  endTime: string, Optional exclusive end time of the time range for which the pricing
+versions will be returned. Timestamps in the future are not allowed.
+The time range has to be within a single calendar month in
+America/Los_Angeles timezone. Time range as a whole is optional. If not
+specified, the latest pricing will be returned (up to 12 hours old at
+most).
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Response message for `ListSkus`.
+    "nextPageToken": "A String", # A token to retrieve the next page of results. To retrieve the next page,
+        # call `ListSkus` again with the `page_token` field set to this
+        # value. This field is empty if there are no more results to retrieve.
+    "skus": [ # The list of public SKUs of the given service.
+      { # Encapsulates a single SKU in Google Cloud Platform
+        "category": { # Represents the category hierarchy of a SKU. # The category hierarchy of this SKU, purely for organizational purpose.
+          "resourceGroup": "A String", # A group classification for related SKUs.
+              # Example: "RAM", "GPU", "Prediction", "Ops", "GoogleEgress" etc.
+          "resourceFamily": "A String", # The type of product the SKU refers to.
+              # Example: "Compute", "Storage", "Network", "ApplicationServices" etc.
+          "usageType": "A String", # Represents how the SKU is consumed.
+              # Example: "OnDemand", "Preemptible", "Commit1Mo", "Commit1Yr" etc.
+          "serviceDisplayName": "A String", # The display name of the service this SKU belongs to.
+        },
+        "serviceProviderName": "A String", # Identifies the service provider.
+            # This is 'Google' for first party services in Google Cloud Platform.
+        "description": "A String", # A human readable description of the SKU, has a maximum length of 256
+            # characters.
+        "skuId": "A String", # The identifier for the SKU.
+            # Example: "AA95-CD31-42FE"
+        "serviceRegions": [ # List of service regions this SKU is offered at.
+            # Example: "asia-east1"
+            # Service regions can be found at https://cloud.google.com/about/locations/
+          "A String",
+        ],
+        "pricingInfo": [ # A timeline of pricing info for this SKU in chronological order.
+          { # Represents the pricing information for a SKU at a single point of time.
+            "effectiveTime": "A String", # The timestamp from which this pricing was effective within the requested
+                # time range. This is guaranteed to be greater than or equal to the
+                # start_time field in the request and less than the end_time field in the
+                # request. If a time range was not specified in the request this field will
+                # be equivalent to a time within the last 12 hours, indicating the latest
+                # pricing info.
+            "aggregationInfo": { # Represents the aggregation level and interval for pricing of a single SKU. # Aggregation Info. This can be left unspecified if the pricing expression
+                # doesn't require aggregation.
+              "aggregationLevel": "A String",
+              "aggregationCount": 42, # The number of intervals to aggregate over.
+                  # Example: If aggregation_level is "DAILY" and aggregation_count is 14,
+                  # aggregation will be over 14 days.
+              "aggregationInterval": "A String",
+            },
+            "pricingExpression": { # Expresses a mathematical pricing formula. For Example:- # Expresses the pricing formula. See `PricingExpression` for an example.
+                #
+                # `usage_unit: GBy`
+                # `tiered_rates:`
+                #    `[start_usage_amount: 20, unit_price: $10]`
+                #    `[start_usage_amount: 100, unit_price: $5]`
+                #
+                # The above expresses a pricing formula where the first 20GB is free, the
+                # next 80GB is priced at $10 per GB followed by $5 per GB for additional
+                # usage.
+              "displayQuantity": 3.14, # The recommended quantity of units for displaying pricing info. When
+                  # displaying pricing info it is recommended to display:
+                  # (unit_price * display_quantity) per display_quantity usage_unit.
+                  # This field does not affect the pricing formula and is for display purposes
+                  # only.
+                  # Example: If the unit_price is "0.0001 USD", the usage_unit is "GB" and
+                  # the display_quantity is "1000" then the recommended way of displaying the
+                  # pricing info is "0.10 USD per 1000 GB"
+              "baseUnit": "A String", # The base unit for the SKU which is the unit used in usage exports.
+                  # Example: "By"
+              "usageUnit": "A String", # The short hand for unit of usage this pricing is specified in.
+                  # Example: usage_unit of "GiBy" means that usage is specified in "Gibi Byte".
+              "baseUnitConversionFactor": 3.14, # Conversion factor for converting from price per usage_unit to price per
+                  # base_unit, and start_usage_amount to start_usage_amount in base_unit.
+                  # unit_price / base_unit_conversion_factor = price per base_unit.
+                  # start_usage_amount * base_unit_conversion_factor = start_usage_amount in
+                  # base_unit.
+              "usageUnitDescription": "A String", # The unit of usage in human readable form.
+                  # Example: "gibi byte".
+              "baseUnitDescription": "A String", # The base unit in human readable form.
+                  # Example: "byte".
+              "tieredRates": [ # The list of tiered rates for this pricing. The total cost is computed by
+                  # applying each of the tiered rates on usage. This repeated list is sorted
+                  # by ascending order of start_usage_amount.
+                { # The price rate indicating starting usage and its corresponding price.
+                  "unitPrice": { # Represents an amount of money with its currency type. # The price per unit of usage.
+                      # Example: unit_price of amount $10 indicates that each unit will cost $10.
+                    "nanos": 42, # Number of nano (10^-9) units of the amount.
+                        # The value must be between -999,999,999 and +999,999,999 inclusive.
+                        # If `units` is positive, `nanos` must be positive or zero.
+                        # If `units` is zero, `nanos` can be positive, zero, or negative.
+                        # If `units` is negative, `nanos` must be negative or zero.
+                        # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
+                    "units": "A String", # The whole units of the amount.
+                        # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
+                    "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
+                  },
+                  "startUsageAmount": 3.14, # Usage is priced at this rate only after this amount.
+                      # Example: start_usage_amount of 10 indicates that the usage will be priced
+                      # at the unit_price after the first 10 usage_units.
+                },
+              ],
+            },
+            "currencyConversionRate": 3.14, # Conversion rate used for currency conversion, from USD to the currency
+                # specified in the request. This includes any surcharge collected for billing
+                # in non USD currency. If a currency is not specified in the request this
+                # defaults to 1.0.
+                # Example: USD * currency_conversion_rate = JPY
+            "summary": "A String", # An optional human readable summary of the pricing information, has a
+                # maximum length of 256 characters.
+          },
+        ],
+        "name": "A String", # The resource name for the SKU.
+            # Example: "services/DA34-426B-A397/skus/AA95-CD31-42FE"
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file